//package com.mall.service;
//
//import com.mall.pojo.CartItem;
//import com.mall.mapper.CartMapper;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//
//// 接口
//public interface CartService {
//    void addToCart(CartItem item);
//    List<CartItem> getCartList(Integer userAccount);
//    void deleteCartItems(Integer userAccount, List<Integer> ids);
//}
//
//// 实现类
//@Service
//class CartServiceImpl implements CartService {
//
//    @Autowired
//    private CartMapper cartMapper;
//
//    @Override
//    public void addToCart(CartItem item) {
//        cartMapper.insert(item);
//    }
//
//    @Override
//    public List<CartItem> getCartList(Integer userAccount) {
//        return cartMapper.findByUserAccount(userAccount);
//    }
//
//    @Override
//    public void deleteCartItems(Integer userAccount, List<Integer> ids) {
//        cartMapper.deleteByIds(userAccount, ids);
//    }
//}
//

package com.mall.service;

import com.mall.mapper.CartMapper;
import com.mall.pojo.CartItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
import java.math.BigDecimal;

import com.mall.pojo.CartItem;
import java.util.List;

public interface CartService {
    void addToCart(CartItem item);
    List<CartItem> getCartList(Long userId);
    void deleteCartItems(Long userId, List<Long> ids);
    void mergeCart(List<CartItem> items, Long userId);
}


@Service
class CartServiceImpl implements CartService {

    @Autowired
    private CartMapper cartMapper;

    @Override
    @Transactional
    public void addToCart(CartItem item) {
        item.setCreateTime(LocalDateTime.now());
        item.setUpdateTime(LocalDateTime.now());
        cartMapper.insert(item);
    }

    @Override
    public List<CartItem> getCartList(Long userId) {
        List<CartItem> cartItems = cartMapper.findByUserId(userId);
        
        // 确保每个CartItem都有其所需的价格、名称和图片数据
        for (CartItem item : cartItems) {
            // 如果price为null，从goods对象中获取
            if (item.getPrice() == null && item.getGoods() != null) {
                // 将Integer转换为BigDecimal
                if (item.getGoods().getPrice() != null) {
                    item.setPrice(new BigDecimal(item.getGoods().getPrice()));
                }
            }
            
            // 设置name和picture，如果它们是null的话
            if (item.getName() == null && item.getGoods() != null) {
                item.setName(item.getGoods().getName());
            }
            
            if (item.getPicture() == null && item.getGoods() != null) {
                item.setPicture(item.getGoods().getImage());
            }
            
            // 确保selected不为null
            if (item.getSelected() == null) {
                item.setSelected(true); // 默认选中
            }
            
            // 确保count不为null
            if (item.getCount() == null) {
                item.setCount(1); // 默认数量为1
            }
        }
        
        return cartItems;
    }

    @Override
    @Transactional
    public void deleteCartItems(Long userId, List<Long> ids) {
        cartMapper.deleteByIds(userId, ids);
    }

    @Override
    @Transactional
    public void mergeCart(List<CartItem> items, Long userId) {
        for (CartItem item : items) {
            CartItem existing = cartMapper.findByUserAndGoods(userId, item.getSkuId());
            if (existing != null) {
                existing.setCount(existing.getCount() + item.getCount());
                existing.setSelected(item.getSelected());
                cartMapper.update(existing);
            } else {
                item.setUserId(userId);
                item.setCreateTime(LocalDateTime.now());
                item.setUpdateTime(LocalDateTime.now());
                cartMapper.insert(item);
            }
        }
    }
}
